The present invention relates to computer systems, and more particularly to memory systems for use in computer systems.
An important use for a computer system is the manipulation of data. This manipulation is sometimes of value in itself, such as organizing a mass of information into tables easily comprehensible by human beings. At other times, the data is manipulated as part of some task that the computer is performing, such as a linear programming optimization process.
The data stored in a computer's memory must be accessed by the computer's control and manipulation circuitry. Conventional memory is composed of multiple locations, each capable of storing information. Each of these locations is much like a post office box. To use the contents of a particular box, you must know its unique identifying number or address. Whenever the computer requires a piece of data, it must know in which location(s) of memory the required data resides. The computer then specifies the address(es) of the appropriate location(s) to the memory, which, in turn, furnishes the computer with the data present in those location(s). Thus, the memory serves as a passive repository of whatever information the computer wishes to place in it.
A computer performs useful tasks by executing programs that are written for it. These programs must have knowledge of the data to be accessed and manipulated as part of the task at hand. Programmers often organize the data into groups called data structures. A programmer typically expends considerable effort keeping track of the actual memory locations involved in each data structure. This book-keeping is not only cumbersome and error-prone, it is terribly inefficient. A simple task, such as a stack access, ideally would take but a single memory access. However, the burden of other operations required to perform the stack access, such as bounds checking and storage management, causes this simple task to require many more accesses to memory.
As illustrated above, the processor-centric designs of existing computer systems are not ideally suited for database and communications applications that by their nature tend to be memory intensive. For example, in communications processing, typically, data from a communication line gets deposited in memory through a system bus with the help of an input/output (I/O) channel processor or direct memory access (DMA) unit. The processing of this data may involve simple, low level operations, such as checksum computation, bit extraction, insertion, header parsing, link list manipulation, table look up, and keyword searches. Generally, no massively processor intensive operations, such as floating point operations, are involved. After the required processing has been completed, the data is placed on an output queue for transmission back to the communication line.
Because these low level operations tend to occur frequently, a great deal of traffic is generated on the system bus resulting in contention on the bus. The processor must continually transmit and receive data from memory so that these necessary low level operations can be performed. In contrast to the over-utilization of the processor, memory tends to be a vastly underutilized resource in computer systems. Conventional memory is not capable of scaling along with the processor and, as a result, the system becomes more congested thereby increasing contention in the system. Large latencies in accessing data from the main memory to the processor cause serious inefficiencies in many computer applications.